package com.xxgc.dao;

import java.sql.*;

/**
 * 实现数据库底层 增删改(update) 查(query)
 */
public class BaseDao {
    // 常量
    private final String DRIVER="com.mysql.jdbc.Driver";
    private final String URL="jdbc:mysql://localhost:3306/rj2001";//数据库连接地址
    private final String USERNAME="root";//数据库连接账号
    private final String PASSWORD="123456";//数据库连接密码

    Connection conn;//连接对象
    Statement sta;//sql执行
    ResultSet rs;// 查询返回结果集
    /***
     * 构造方法： 与类同名，没有返回值
     * 作用：  new 被调用，  完成类的初始化
     */
    public BaseDao(){
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /***
     * 获得连接
     */
    public void getConnection(){
        try {
            conn= DriverManager.getConnection(URL,USERNAME,PASSWORD);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    /***
     * 统一释放资源
     */
    public void close(){
        try {
            if(rs!=null){
                rs.close();
            }
            if(sta!=null){
                sta.close();
            }
            if(conn!=null){
                conn.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    /***
     * 执行增 删 改
     * 返回受影响行数
     */
    public int update(String sql){
        int num=0; //因为增 删 改 返回受影响行数
        //获取连接
        getConnection();
        try {
            //执行对象
            sta=conn.createStatement();
            //执行sql
            num=sta.executeUpdate(sql);
            //释放资源
            this.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return  num;
    }

    /***
     * 通用查询接口
     * @param sql 传入的sql语句
     * @return 返回结果集
     */
    public ResultSet query(String sql) {
        //获取连接
        getConnection();
        try {
            //执行对象
            sta = conn.createStatement();
            // 执行sql语句
            rs = sta.executeQuery(sql);
            //释放资源
            this.close();

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return rs;
    }


}
